package com.itfenghuang.day06;

public class A01_Exception {
    public static void main(String[] args) {
        /**异常
         * 1.概念
         *      空指针,索引越界
         *  2.异常体系结构
         *  Throwable 异常的根
         *      Error:
         *          一旦出现就是发生了严重的错误,比如说:内存溢出
         *      Exception:
         *          运行时异常: 编译期可以不用处理,在运行字节码文件的时候可能会出现的异常
         *          比如:空指针
         *          运行时异常: RuntimeException及其子类
         *          非运行时异常: 除了RuntimeException及其子类的异常
         *                  特点:在编译期必须处理,不然编译不能通过
         *   运行时异常和非异常区别:
         *          不用处理和要处理
         *
         *3.出现异常时虚拟机做了什么即jvm默认处理异常的方式
         *      虚拟机会将异常信息在控制台红色字体打印出来
         *      终止程序运行,哪里出现异常在哪里停止
         *
         * 4.异常的处理方式
         *      (1)throws: 进行抛出异常
         *          谁调用,交给谁处理
         *      (2)try-catch:  自己处理异常
         *          格式:
         *              try{
         *
         *              }catch(){
         *
         *              }
         *
         * 5.主动抛出一个异常
         *      throw
         *
         *
         * 6.自定义异常类
         *      如果现在的异常类不能够满足我门的需求,我们可以自己定义一个异常
         *          案列:  键盘录入一个学生的姓名和年龄,其中年龄18到25之间如果超出这个范围
         *                  就不能够给年龄赋值
         *
         *
         */


        //自己处理
        //如果在try中的代码出现了异常,会被catch捕获,然后执行catch中的代码,最后程序继续往下执行
//        System.out.println("这是开始");
//        try {
//            System.out.println("异常出现之前");
//            System.out.println(3 / 0);
//            System.out.println("异常出现之后");
//        } catch (Exception e) {
//            System.out.println("捕捉异常");
//            e.printStackTrace();
//        }
//        System.out.println("爆爆");

        //主动抛出一个异常
//        throw new RuntimeException();//作用:

        Student student = new Student();
        student.setAge(30);
        student.getAge();


    }
}
class Student{
    private  String name;
    private  int age;

    public void setAge(int age) {
        if (age>18 && age<25){
            this.age = age;
            System.out.println(age);
        }else{
            //主动抛出一个异常
            throw new A01_AgeOutOfBoundsException();
        }
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
